package com.sunfeng.two.p3;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;
import util.ConnectionUtil;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
import java.util.concurrent.TimeoutException;

/**
 * @Author : 清风冷影
 * @Description:  发布确认

 * @Date : 2021/8/20  15:04
 */
public class Task03 {
    private static final String TASK_QUEUE_NAME = "ack_queue";


    public static void main(String[] args) throws IOException, TimeoutException {

        final Channel channel = ConnectionUtil.getChannel();
        // 开启发布确认
        channel.confirmSelect();

        //声明 队列持久化
        channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);

        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()){
            String message = scanner.next();

            /**
             *
             * 消息持久化 配置MessageProperties.PERSISTENT_TEXT_PLAIN
             *
             * 将消息标记为持久化并不能完全保证不会丢失消息。尽管它告诉 RabbitMQ 将消息保存到磁盘，但是这里依然存在当消息刚准备存储在磁盘的时候 但是还没有存储完，
             * 消息还在缓存的一个间隔点。此时并没有真正写入磁盘。持久性保证并不强，但是对于我们的简单任务队列而言，这已经绰绰有余了。
             */
            channel.basicPublish("",TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes(StandardCharsets.UTF_8));



            System.out.println("消息发送成功");
        }
    }
}
